package com.example.jimanguang.web;

import com.alibaba.fastjson.JSONObject;
import com.example.jimanguang.Repositories.untils.AuthUtils;
import com.example.jimanguang.Repositories.untils.FileUtils;
import com.example.jimanguang.Services.UserService;
import com.example.jimanguang.constants.ApiConstant;
import com.example.jimanguang.constants.Messages;
import com.example.jimanguang.web.models.ApiResult;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;


@CrossOrigin//origins允许谁跨域
@RequestMapping(ApiConstant.ROUTE_AUTH_ROOT)//控制器的根路由
@RestController//@RestController=@Controller+@ResponseBody表示返回的数据不是html标签的页面，而是其他某种数据格式的数据，如json,xml
public class AuthApicontroller {
//用常量类来保存路由（统一管理)
//也是使用构造器注入
    private final UserService userService;
    @Autowired
    public AuthApicontroller(UserService userService) {
        this.userService = userService;
    }

   @PostMapping(value = ApiConstant.ROUTE_AUTH_LOGIN,produces = ApiConstant.API_PRODUCES)//post需要修改数据和状态
    public ApiResult login(@RequestBody JSONObject json){//登录
     return userService.Login(json);
   }
   //注销使用的api
   @PostMapping(ApiConstant.ROUTE_AUTH_LOGOUT)
   public ApiResult logout(@RequestParam String token){
        return  new ApiResult(true, AuthUtils.logout(token),null);
   }

   //用于前端判断用户是否存在的。假设有一个 URI 包含路径变量 /users/{user}，那么使用 @PathVariable 便可以将 {user} 绑定到方法参数 user
  @GetMapping(ApiConstant.ROUTE_AUTH_IS_USERNAME)
  public ApiResult isUserExists(@PathVariable String user){
      boolean exists = userService.isUserNameOccupied(user);
      return new ApiResult(true,Messages.USER_EXISTS.name(), exists);
  }

  @PostMapping(ApiConstant.ROUTE_AUTH_REGISTER)
  public ApiResult register(@RequestBody JSONObject json){
   return   userService.chekUesr(json);
  }

  //头像上传
  // 读取YML上传文件路径
  @Value("${user.pic}")
  private String filePath;
  @PostMapping(ApiConstant.ROUTE_AUTH_UPLOAD)
  public ApiResult upload(@RequestParam("file") MultipartFile file){//@RequestParam为参数注解添加别名
      JSONObject result = FileUtils.upload(file, filePath);
      return new ApiResult(result.getBoolean(FileUtils.UPLOAD_PARAM_STATUS),
              result.getString(FileUtils.UPLOAD_PARAM_MESSAGE),
              result.getString(FileUtils.UPLOAD_PARAM_URL));

  }



}
